package br.unifor.locadora.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;


import br.unifor.locadora.entity.Cliente;

public class ClienteDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {
			Cliente cliente = new Cliente();
			cliente.setCodigo(resultSet.getInt("codigo"));
			cliente.setNome(resultSet.getString("nome"));
			cliente.setCpf(resultSet.getString("cpf"));
			cliente.setTelefone(resultSet.getString("telefone"));
			cliente.setDataNascimento(resultSet.getDate("data de nascimento"));
			cliente.setEmail(resultSet.getString("Email"));
			cliente.setEndereco(resultSet.getString("endereço"));
			return cliente;
		}
	};

	public void salvar(Cliente cliente) throws SQLException {

		String sql = "insert into administrador (codigo, nome, cpf,telefone,data_nascimento,email,endereco) values (?, ?, ?, ?, ?, ?)";
		em.executeQuery(sql, cliente.getCodigo(), cliente.getNome(),
				cliente.getCpf(), cliente.getTelefone(),
				cliente.getDataNascimento(), cliente.getEmail(),
				cliente.getEndereco());
	}

	public void atualizar(Cliente cliente) throws SQLException {
		String sql = "update Cliente set codigo = ?, nome = ?, cpf = ?, telefone = ?, data nascimento = ?, email = ?, endereco = ? where codigo = ?";
		em.executeQuery(sql, cliente.getCodigo(), cliente.getNome(),
				cliente.getCpf(), cliente.getTelefone(),
				cliente.getDataNascimento(), cliente.getEmail(),
				cliente.getEndereco());
	}

	public void excluirPorCodigo(Integer codigo) throws SQLException {
		String sql = "delete from Cliente where codigo = ?";
		em.executeQuery(sql, codigo);
	}

	public void excluirTodos() throws SQLException {

		String sql = "delete from Cliente";
		em.executeQuery(sql);
	}

	public Cliente buscarPorCodigo(Integer codigo) throws SQLException {

		String sql = "select codigo, nome, cpf, telefone, DataNascimento, email, endereco "
				+ "from Cliente where codigo = ?, nome= ?, cpf= ?, telefone= ?, DataNascimento= ?, email= ?, endereco= ?";
		return (Cliente) em.getSingleResult(sql, codigo);
	}

	@SuppressWarnings("unchecked")
	public List<Cliente> buscarPorcodigo(Cliente cliente) throws SQLException {
		String sql = "select codigo, nome, cpf, telefone, DataNascimento, email, endereco from Cliente where codigo, nome, cpf, telefone, DataNascimento, email, endereco ilike ?";
		return (List<Cliente>) em.getResultList(sql, cliente.getCodigo(),
				cliente.getNome(), cliente.getCpf(), cliente.getTelefone(),
				cliente.getDataNascimento(), cliente.getEmail(),
				cliente.getEndereco());
	}

	@SuppressWarnings("unchecked")
	public List<Cliente> buscarTodos() throws SQLException {
		String sql = "select codigo, nome, cpf, telefone, DataNascimento, email, endereco from Cliente where codigo, nome, cpf, telefone, DataNascimento, email, endereco from cliente";
		return (List<Cliente>) em.getResultList(sql);
	}

}